iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0

歡迎來到我們30天生成式AI和Spring AI學習之旅的第六天!今天,我們將把之前學到的知識應用到實際中,實現一個簡單的問答應用程式。這個應用程序將接受用戶的問題,並使用生成式AI模型生成對應的答案。我們還將測試這個應用程序,並探索AI回應的非確定性特徵。

實現一個簡單的問答應用程式

首先,我們將創建一個簡單的Spring Boot應用程式,使用ChatClient與AI模型進行交互。以下是實現步驟:

1. 建立Spring Boot項目

您可以使用Spring Initializr或任何您喜歡的方式創建一個新的Spring Boot項目,並添加以下依賴:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

2. 配置OpenAI API密鑰

在應用程式的application.properties或環境變量中配置您的OpenAI API密鑰:

spring.ai.openai.api-key=您的API密鑰
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

3. 編寫服務層

創建一個服務類,用於與ChatClient交互:

@Service
public class QuestionAnswerService {

    private final ChatClient chatClient;

    public QuestionAnswerService(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    public String getAnswer(String question) {
        return chatClient.prompt()
            .user(question)
            .call()
            .content();
    }
}

4. 創建控制器

創建一個REST控制器,接受用戶的問題並返回答案:

@RestController
@RequestMapping("/qa")
public class QuestionAnswerController {

    private final QuestionAnswerService questionAnswerService;

    public QuestionAnswerController(QuestionAnswerService questionAnswerService) {
        this.questionAnswerService = questionAnswerService;
    }

    @PostMapping("/ask")
    public ResponseEntity<Map<String, String>> askQuestion(@RequestBody Map<String, String> payload) {
        String question = payload.get("question");
        String answer = questionAnswerService.getAnswer(question);
        return ResponseEntity.ok(Map.of("answer", answer));
    }
}

5. 啟動應用程式

確保所有配置和編譯正確,然後啟動您的Spring Boot應用程式。

測試應用程式與提示

現在,我們可以測試這個簡單的問答應用程式。

測試示例

使用curl或其他HTTP客戶端發送POST請求:

curl -X POST -H "Content-Type: application/json" -d '{"question": "世界上最高的山是什麼?"}' http://localhost:8080/qa/ask

預期響應:

{
  "answer": "世界上最高的山是珠穆朗瑪峰(Mount Everest),其海拔高度約為8,848米。"
}

更多測試

嘗試不同的問題,看看AI模型的回答如何:

  • "太陽系中最大的行星是什麼?"
  • "你能給我講一個有趣的笑話嗎?"
  • "解釋一下量子糾纏是什麼。"

探索AI回應的非確定性特徵

在多次測試中,您可能會發現即使輸入相同的問題,AI模型的回答也可能略有不同。這是生成式AI的非確定性特徵。

原因解析

  • 溫度(Temperature)設置:溫度決定了生成內容的隨機性。較高的溫度會使輸出更具創造性和多樣性,而較低的溫度則使輸出更集中和確定性。
  • 模型的概率性:AI模型基於概率生成下一個詞或句子,因此每次生成可能略有不同。

控制非確定性

您可以通過調整temperature參數來控制輸出的隨機性。在application.properties中:

spring.ai.openai.chat.options.temperature=0.3

較低的 temperature 會使模型的回答更一致。

觀察效果

重新測試應用程式,觀察在不同 temperature 下,模型的回答是否更加一致或多樣。

總結

今天,我們實踐了以下內容:

  • 實現了一個簡單的問答應用程式,使用Spring Boot和ChatClient與AI模型交互。
  • 測試了應用程式,並通過示例提示觀察了模型的回答。
  • 探索了AI回應的非確定性特徵,了解了溫度等參數對輸出的影響。

上一篇
第5天:提交基本提示(Prompts)
系列文
從零開始的生成式 AI 開發之路:Spring AI 的實戰指南6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言